package com.gin.no_gay_alliance.utils;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.IntRange;

import com.gin.no_gay_alliance.app.MyApplication;

/**
 * 剪贴板工具类
 *
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/8/4 11:17
 **/
public class ClipboardUtils {
    public static final String TAG = ClipboardUtils.class.getSimpleName();

    /**
     * 清空剪贴板内容
     */
    public static void clear() {
        Log.d(TAG, "清理剪贴板");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            getClipboardManager().clearPrimaryClip();
        } else {
            getClipboardManager().setPrimaryClip(ClipData.newPlainText("label", ""));
        }
    }

    /**
     * 获取剪贴板管理器
     *
     * @return 剪贴板管理器
     */
    public static ClipboardManager getClipboardManager() {
        return (ClipboardManager) MyApplication.app.getSystemService(Context.CLIPBOARD_SERVICE);
    }

    /**
     * 获取剪贴板中的文本数据
     *
     * @param index 第几个数据
     * @return 文本
     */
    public static String getText(@IntRange(from = 0) int index) {
        ClipboardManager clipboard = getClipboardManager();
        if (clipboard.hasPrimaryClip()) {
            ClipData clipData = clipboard.getPrimaryClip();
            return getText(clipData, index);
        }
        return null;
    }

    /**
     * 设置剪贴板中的文本数据
     *
     * @param activity 活动
     * @param text     文本
     */
    public static void setText(Context activity, String text) {
        setText(activity, text, null);
    }

    /**
     * 设置剪贴板中的文本数据
     *
     * @param activity 活动
     * @param text     文本
     * @param message  提示文本
     */
    public static void setText(Context activity, String text, String message) {
        getClipboardManager().setPrimaryClip(ClipData.newPlainText("", text));
        Log.d(TAG, "已复制: " + text);
        Toast.makeText(activity, message != null ? message : "已复制", Toast.LENGTH_SHORT).show();
    }

    private static String getText(ClipData clipData, @IntRange(from = 0) int index) {
        if (clipData == null) {
            return null;
        }
        ClipData.Item item = clipData.getItemAt(index);
        if (item == null) {
            return null;
        }
        CharSequence text = item.getText();
        if (text == null || "".contentEquals(text)) {
            return null;
        }
        return text.toString();
    }

}
